/** 枚举值管理类 */
export default class EnumManager {
  constructor(props) {
    this.options = Object.entries(props).map(([key, option]) => {
      this[key] = option.value
      return option
    })
  }
  get(value, optionKey) {
    const option = this.options.find(option => String(option.value) === String(value))
    return option?.[optionKey]
  }
  /** 获取文本 */
  getText(value) {
    return this.get(value, 'label') || '-'
  }
  /** 获取单个option */
  getOption(value) {
    return this.options.find(option => String(option.value) === String(value))
  }
  /** 获取多个option */
  getOptions(values = []) {
    return values.map(value => this.options.find(option => String(option.value) === String(value)))
  }
}

/** 使用这个方式维护的枚举值
 * 场景一 获取文本 ENUM.getText(1)  ENUM.getText('1')
 * 场景二 业务中判断 type(后端返回) === ENUM.ENUM_TEXT
 * 场景三 搜索获取options => ENUM.options; 带有‘全部’项的 options => ENUM.optionsWithAll
 * 场景四 获取部分options ENUM.getOptions([ENUM.ENUM_TEXT1, ENUM.ENUM_TEXT2], true|false - 是否带全部)
 * 场景五 获取单个option ENUM.getOption(ENUM.ENUM_TEXT) 单个有利于灵活组合
 */

/** 布尔类型 */
export const BOOLEAN_ENUM = new EnumManager({
  TRUE: { value: true, label: '是' },
  FALSE: { value: false, label: '否' },
})

/** 有无类型 */
export const HAVE_ENUM = new EnumManager({
  HAVE: { value: true, label: '有' },
  NOT_HAVE: { value: false, label: '无' },
})

/** 性别类型 */
export const GENDER_ENUM = new EnumManager({
  UNKOWN: { value: 0, label: '未知' },
  FEMALE: { value: 1, label: '女' },
  MALE: { value: 2, label: '男' },
})

/** 状态类型 */
export const ENABLE_STATUS_ENUM = new EnumManager({
  ENABLE: { value: true, label: '在用' },
  DISABLE: { value: false, label: '停用' },
})

/** 文件类型 */
export const FILE_TYPE_ENUM = new EnumManager({
  VIDEO: { value: 1, label: '视频' },
  AUDIO: { value: 2, label: '语音' },
  IMAGE: { value: 3, label: '图片' },
  PDF: { value: 4, label: 'pdf' },
  WORD: { value: 5, label: 'word' },
})

/** 文件上传类型 */
export const FILE_UPLOAD_TYPE_ENUM = new EnumManager({
  IMAGE: { value: 'image/jpeg,image/png', label: '图片' },
  VIDEO: { value: 'video/mp4,video/quicktime', label: '视频' },
  AUDIO: { value: '', label: '语音' },
  PDF: { value: 'application/pdf', label: 'pdf' },
  WORD: {
    value: '.doc,.docx,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document',
    label: 'word',
  },
  EXECL: {
    value: '.xls,.xlsx,application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
    label: 'execl',
  },
})

/** 系统-资质类型 */
export const SYS_QUALIFICATION_TYPE_ENUM = new EnumManager({
  TRANSPORTATION: { value: '1', label: '运送' },
  COMPANIONSHIP: { value: '2', label: '陪护' },
  ENGINEERING: { value: '3', label: '工程' },
})

/** 系统-保存人员岗位  */
export const SYS_USER_POSITION_ENUM = new EnumManager({
  DISPATCHER: { value: 1, label: '调度员' },
  TEAM_LEADER: { value: 2, label: '组长' },
  // PROJECT_MANAGER: { value: 3, label: '项目经理' },
})

/** 陪护内容-适用对象 */
export const PCS_CONTENT_AVAILABLEPOPULATION_ENUM = new EnumManager({
  ALL: { value: 1, label: '所有人' },
  RESTRICTED: { value: 2, label: '限定对象' },
})

/** 陪护内容-自理情况 */
export const PCS_SELFCARESTATUS_ENUM = new EnumManager({
  CAN_SELF_CARE: { value: 1, label: '能自理' },
  SEMI_SELF_CARE: { value: 2, label: '半自理' },
  CANNOT_SELF_CARE: { value: 3, label: '不能自理' },
})

/** 陪护内容-病情症状 */
export const PCS_MEDICALSYMPTOMS_ENUM = new EnumManager({
  NONE: { value: 0, label: '无' },
  DIABETES: { value: 1, label: '糖尿病' },
  FRACTURE: { value: 2, label: '骨折' },
  HYPERTENSION: { value: 3, label: '高血压' },
  CARDIOVASCULAR_DISEASE: { value: 4, label: '心血管病' },
  STROKE: { value: 5, label: '脑梗' },
  CHRONIC_BRONCHITIS: { value: 6, label: '慢支' },
  DEMENTIA: { value: 7, label: '痴呆' },
  OTHER: { value: 8, label: '其它' },
})

/** 陪护内容-进食方式 */
export const PCS_EATINGMETHOD_ENUM = new EnumManager({
  SELF_FEEDING: { value: 1, label: '自己吃饭' },
  ORAL_FEEDING: { value: 2, label: '经口喂食' },
  NASAL_FEEDING: { value: 3, label: '鼻饲喂食' },
  OTHER: { value: 4, label: '其他' },
})

/** 陪护内容-导管陪护 */
export const PCS_CATHETERCOMPANION_ENUM = new EnumManager({
  URINARY_CATHETER: { value: 1, label: '导尿管' },
  DRAINAGE_TUBE: { value: 2, label: '引流管' },
  INDWELLING_NEEDLE: { value: 3, label: '留置针' },
  PICC_LINE: { value: 4, label: 'PICC' },
  GASTRIC_TUBE: { value: 5, label: '胃管' },
  OTHER: { value: 6, label: '其他' },
})

/** 陪护内容-药物协助 */
export const PCS_MEDICATIONASSISTANCE_ENUM = new EnumManager({
  NONE: { value: 0, label: '无' },
  MEDICATION_ASSISTANCE: { value: 1, label: '协助服药' },
  INFUSION_COMPANION: { value: 2, label: '输液陪护' },
  OTHER: { value: 3, label: '其他' },
})

/** 陪护内容-其他陪护 */
export const PCS_OTHERCOMPANIONSHIP_ENUM = new EnumManager({
  BEDSORE_CARE: { value: 1, label: '压疮' },
  SPUTUM_SUCTION: { value: 2, label: '吸痰' },
  STOMA_CARE: { value: 3, label: '造口' },
  ENEMA: { value: 4, label: '灌肠' },
  OTHER: { value: 5, label: '其他' },
})

/** 护工管理-陪护方式 */
export const PCS_COMPANION_WAY_ENUM = new EnumManager({
  DEDICATED: { value: 1, label: '专人陪护' },
  TEAM: { value: 2, label: '团队陪护' },
})

/** 护工管理-陪护状态 */
export const PCS_COMPANION_STATUS_ENUM = new EnumManager({
  WAITING: { value: 1, label: '待岗' },
  IN_SERVICE: { value: 2, label: '服务中' },
})

/** 护工管理-陪护类型 */
export const PCS_COMPANION_TYPE_ENUM = new EnumManager({
  HOSPITAL: { value: 1, label: '医院' },
  HOME: { value: 2, label: '居家' },
})

/** 护工管理-收费方式 */
export const PCS_COMPANION_CHARGE_MODEL_ENUM = new EnumManager({
  DAY: { value: 1, label: '天' },
})

/** 护工管理-开始时段 */
export const PCS_COMPANION_PERIOD_ENUM = new EnumManager({
  BEFORE12: { value: 1, label: '12点前' },
  AFTER12: { value: 2, label: '12点后' },
})

/** 护工管理-专业技能 */
export const PCS_PROFESSIONALSKILLS_ENUM = new EnumManager({
  PATIENT_CARE: { value: 1, label: '病人日常护理' },
  MEDICATION_MANAGEMENT: { value: 2, label: '药物管理和使用' },
  BASIC_MEDICAL_PROCEDURES: { value: 3, label: '基础医疗操作（量血压、打针等）' },
  PSYCHOLOGICAL_COUNSELING: { value: 4, label: '心理辅导与支持' },
  HYGIENE_ASSISTANCE: { value: 5, label: '清洁助浴' },
})

/** 护工管理-擅长领域 */
export const PCS_STRONGPOINTS_ENUM = new EnumManager({
  ELDERLY_CARE: { value: 1, label: '老年护理' },
  REHABILITATION_CARE: { value: 2, label: '康复护理' },
  POSTOPERATIVE_CARE: { value: 3, label: '术后护理' },
  CHRONIC_DISEASE_MANAGEMENT: { value: 4, label: '慢性疾病管理' },
  SPECIAL_NEEDS_COMPANIONSHIP: { value: 5, label: '特殊需求陪护（自闭症、残疾人士护理等）' },
})

/** 护工管理-服务态度 */
export const PCS_SERVICEATTITUDE_ENUM = new EnumManager({
  PATIENT_AND_ATTENTIVE: { value: 1, label: '耐心细致' },
  EMOTIONALLY_STABLE: { value: 2, label: '情绪稳定' },
  RESPECTING_PRIVACY: { value: 3, label: '尊重患者隐私' },
})

/** 护工管理-基本资质 */
export const PCS_NURSINGCREDENTIAL_ENUM = new EnumManager({
  CERTIFIED_NURSING: { value: 1, label: '持有护理资格证书' },
  PROFESSIONAL_TRAINING_COMPLETED: { value: 2, label: '完成专业护理培训' },
  BASIC_MEDICAL_KNOWLEDGE_AND_FIRST_AID_SKILLS: { value: 3, label: '具备基础医疗知识和急救技能' },
})

/** 陪护套餐-陪护选择 */
export const PCS_COMPANION_SELECTION_ENUM = new EnumManager({
  EXCLUSIVE: { value: 1, label: '专属' },
  NON_EXCLUSIVE: { value: 2, label: '非专属' },
})

/** 陪护套餐-类型 */
export const PCS_COMBO_TYPE_ENUM = new EnumManager({
  ACCOMPANYING: { value: 0, label: '陪护' },
  DIAGNOSIS: { value: 1, label: '陪诊' },
})

/** 陪护套餐-开始日计费方式 */
export const PCS_START_DATE_CHARGE_MODEL_ENUM = new EnumManager({
  ONE_DAY: { value: 1, label: '当日计费一天' },
  HALF_A_DAY_AFTER_12: { value: 2, label: '当日计费半天' },
  NO_DAY_CHARGE: { value: 3, label: '当日不计费' },
  ONE_DAY_BEFORE_12_AND_NO_CHARGE_AFTER_12: { value: 4, label: '12点前算一天，12点后不计费' },
})

/** 陪护套餐-结束日计费方式 */
export const PCS_END_DATE_CHARGE_MODEL_ENUM = new EnumManager({
  ONE_DAY: { value: 1, label: '当日计费一天' },
  HALF_A_DAY_BEFORE_12: { value: 2, label: '12点前结束算半天，12点后结束算一天' },
  NO_DAY_CHARGE: { value: 3, label: '当日不计费' },
  NO_CHARGE_BEFORE_12_AND_ONE_DAY_AFTER_12: { value: 4, label: '12点前不计费，12点后算一天' },
})

/** 陪护套餐-跨天结算计费方式 */
export const PCS_DAYS_ETTLEMENT_CHARGE_MODEL_ENUM = new EnumManager({
  HALF_A_DAY_BEFORE_12: { value: 0, label: '12点前算半天，12点后算一天' },
  ONE_DAY: { value: 1, label: '当日计费一天' },
})

/** 陪护套餐-外包结算类型 */
export const PCS_OUTSOURCING_SETTLE_TYPE_ENUM = new EnumManager({
  PERCENT: { value: 1, label: '百分比' },
  FIXED: { value: 2, label: '固定额' },
})

/** 护嘱事项 - 显示在照护日志 */
export const PCS_DISPLAY_IN_LIFELOG_ENUM = new EnumManager({
  WITH: { value: 1, label: '有' },
  WITHOUT: { value: 0, label: '无' },
})

/** 护嘱事项 - 护嘱状态 */
export const PCS_NURSING_ITEM_STATUS_ENUM = new EnumManager({
  WITH: { value: 1, label: '开启' },
  WITHOUT: { value: 0, label: '关闭' },
})

/** 护嘱事项-属性选项 */
export const PCS_ATTRIBUTE_TYPE_ENUM = new EnumManager({
  INPUT: { value: 1, label: '文本框' },
  TIMERANGE: { value: 2, label: '时间范围' },
  NUMBER: { value: 3, label: '数字框' },
  RADIO: { value: 4, label: '单选' },
  MEALS: { value: 5, label: '膳食内容（接口）' },
})

/** 护嘱事项-默认勾选 */
export const PCS_DEFAULT_CHECKED_IN_NURSING_PLAN_ENUM = new EnumManager({
  DEFAULT_CHECKED: { value: 1, label: '默认勾选' },
  NOT_CHECKED: { value: 0, label: '' },
})

/** 商品管理-上架状态 */
export const PCS_GOODS_STATUS_ENUM = new EnumManager({
  NOT_LISTED: { value: 0, label: '未上架' },
  HAS_LISTED: { value: 1, label: '已上架' },
  ALL: { value: 2, label: '全部' },
})

/** 商品订单-收货类型 */
export const PCS_ORDERS_TYPE_ENUM = new EnumManager({
  HOSPITAL: { value: 1, label: '院内' },
  HOME: { value: 2, label: '居家' },
})

/** 长护险状态 */
export const PCS_TRANSACTION_STATUS_ENUM = new EnumManager({
  NOT_PROCESSED: { value: 0, label: '待办理' },
  PROCESSED: { value: 1, label: '已办理' },
  ALL: { value: 2, label: '全部' },
})

/** 陪护订单-状态 */
export const PCS_COMPANION_ORDER_STATUS_ENUM = new EnumManager({
  BE_COMMUNICATED: { value: 1, label: '待沟通', tagColor: '#F57D4F' },
  IN_SERVICE: { value: 2, label: '服务中', tagColor: '#22D3A5' },
  BE_PAID: { value: 5, label: '待支付', tagColor: '#F5C04F' },
  COMPLETED: { value: 3, label: '已完成', tagColor: '#3E84E9' },
  CANCELED: { value: 4, label: '已取消', tagColor: '#C8C8C8' },
})

/** 陪护订单-取消类型 1-待沟通取消 2-待支付取消 */
export const PCS_COMPANION_ORDER_CANCELTYPE_ENUM = new EnumManager({
  CANCELLATION_TO_BE_COMMUNICATED: { value: 1, label: '待沟通取消' },
  CANCELLATION_TO_BE_PAID: { value: 2, label: '待支付取消' },
})

/** 陪护信息-陪护时段 */
export const ACCOMPANYING_PERIOD_ENUM = new EnumManager({
  ALL_DAY: { value: 0, label: '全天' },
  DAYTIME: { value: 1, label: '白天' },
  NIGHT: { value: 2, label: '夜间' },
})

/** 支付状态 */
export const PAY_STATUS = new EnumManager({
  PAYING: { value: 0, label: '支付中' },
  SUCCESS: { value: 1, label: '支付成功' },
  FAIL: { value: 2, label: '支付失败', color: 'red' },
})

/** 支付渠道 */
export const PAY_CHANNEL = new EnumManager({
  ONLINE: { value: 1, label: '线上' },
  OFFLINE: { value: 2, label: '线下' },
})

/** 结算管理-状态 */
export const PCS_STATEMENT_STATUS_ENUM = new EnumManager({
  BE_PAID: { value: '1', label: '待支付' },
  COMPLETED: { value: '2', label: '已完成' },
})

/** 结算详情-Tab */
export const PCS_STATEMENT_DETAIL_TAB_ENUM = new EnumManager({
  SUMMARY: { value: '1', label: '汇总' },
  DETAIL: { value: '2', label: '明细' },
})

/** 结算详情-账单类型 */
export const PCS_BILL_TYPE_ENUM = new EnumManager({
  WJ: { value: 1, label: '订单完结' },
  GH: { value: 2, label: '护工更换' },
  JZ: { value: 3, label: '手工建账' },
})

/** 付款状态 */
export const PAY_STATUS_ENUM = new EnumManager({
  D: { value: 1, label: '待支付' },
  Y: { value: 2, label: '已完成' },
  z: { value: 3, label: '支付中' },
})

/** 订单统计-Tab */
export const PCS_ORDER_STATISTICS_TAB_ENUM = new EnumManager({
  PERSON: { value: '1', label: '人员' },
  DETAIL: { value: '2', label: '明细' },
})

/** 账单管理-Tab */
export const PCS_BILL_MANAGE_TAB_ENUM = new EnumManager({
  WAIT_CONFIRM: { value: '1', label: '待确认' },
  CONFIRMED: { value: '2', label: '已确认' },
})

/** 机构类型 */
export const HOSPITAL_ORG_TYPE_CONFIG = new EnumManager({
  HOSPITAL: { value: 0, label: '医疗机构' },
  SERVICE_ORGANIZATION: { value: 1, label: '运营服务机构' },
})
